package com.linksfield.topup.mapper;

import com.linksfield.topup.config.dto.PageAndSort;
import com.linksfield.topup.entity.common.*;
import com.linksfield.topup.entity.interfaces.comlinkmanage.search.request.RequestContentPlanSearch;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * H5方案管理：企业H5内容方案业务逻辑数据库操作映射接口
 *
 * @author: lm
 * @date: 2019-11-21 15:40
 */

@Mapper
public interface PartnerConfigMapper {
    /***
     * 查询计算企业H5方案分页信息
     * @param request
     * @return
     */
    long searchPageCount(@Param("request") RequestContentPlanSearch request);

    /**
     * 查询方案企业H5方案分页信息列表
     *
     * @param request
     * @param pageHelper
     * @return
     */
    List<PartnerConfigContent> contentPlanSearch(@Param("request") RequestContentPlanSearch request,
                                                 @Param("pageHelper") PageAndSort pageHelper);

    /***
     * 根据渠道编码和方案类型查询条数
     * @param partnerCode
     * @param configType
     * @return
     */
    Integer queryConfigCount(@Param("partnerCode") String partnerCode,
                             @Param("configType") String configType);

    /***
     * 企业H5方案:服务语言内容配置入库
     * @param lang
     * @return
     */
    Integer planCreateConfigLang(PartnerConfigLang lang);

    /***
     * 企业H5方案:配置内容入库
     * @param content
     * @return
     */
    Integer planCreateConfigContent(PartnerConfigContent content);

    /***
     *企业H5方案四:支付配置
     * @param pay
     * @return
     */
    Integer planCreateConfigPay(PartnerConfigPay pay);

    /***
     * 根据企业和方案类型查询语言配置内容
     * @param partnerCode
     * @param configType
     * @param planCode
     * @return
     */
    List<PartnerConfigLang> queryLangConfig(@Param("planCode") String planCode,
                                            @Param("partnerCode") String partnerCode,
                                            @Param("configType") String configType);

    /***
     *根据企业和方案类型查询内容配置
     * @param partnerCode
     * @param configType
     * @param planCode
     * @return
     */
    List<PartnerConfigContent> queryContentConfig(@Param("planCode") String planCode,
                                                  @Param("partnerCode") String partnerCode,
                                                  @Param("configType") String configType
    );

    /***
     *根据partnerCode企业查询支付配置内容
     * @param partnerCode
     * @return
     */
    List<PartnerConfigPay> queryPayConfig(@Param("partnerCode") String partnerCode);

    /**
     * 为 admin 管理员获取语种服务列表
     *
     * @return
     */
    List<LanguageType> queryLangList();


    /***
     * 查询企业方案内容表里面是否存在此方案记录
     * @param partnerCode
     * @param configType
     * @param configStatus
     * @param planCode
     * @return
     */
    Integer queryContentCount(@Param("planCode") String planCode,
                              @Param("partnerCode") String partnerCode,
                              @Param("configType") String configType,
                              @Param("configStatus") String configStatus);

    /***
     *查询企业方案语言表里面是否存在此方案记录
     * @param partnerCode
     * @param configType
     * @param planCode
     * @return
     */
    Integer queryLangCount(@Param("planCode") String planCode,
                           @Param("partnerCode") String partnerCode,
                           @Param("configType") String configType);

    /**
     * 去更新方案中的updateDate字段时间
     *
     * @param content
     */
    void updateConfigContentDate(PartnerConfigContent content);

    /**
     * 语言文本配置编辑:
     * 语言选择之后不允许编辑 ：优先级和欢迎语可以编辑,欢迎语有值的时候
     *
     * @param lang
     * @return
     */
    Integer editPlanConfigLang(PartnerConfigLang lang);

    /**
     * 语言文本配置编辑:
     * 语言选择之后不允许编辑 ：优先级和欢迎语可以编辑,欢迎语没有值的时候
     *
     * @param lang
     * @return
     */

    Integer editPlanConfigLangNoWelcomeLang(PartnerConfigLang lang);

    /***
     * 方案内容配置编辑:
     * 编辑 ：包含图片文本内容一起编辑
     * @param content
     * @return
     */
    Integer editPlanConfigContentWithFile(PartnerConfigContent content);

    /**
     * 方案内容配置编辑:
     * 编辑 ：不包含图片文本内容一起编辑
     *
     * @param content
     * @return
     */
    Integer editPlanConfigContentNotFile(PartnerConfigContent content);

    /**
     * 方案内容配置编辑:
     * 背景图片编辑
     *
     * @param content
     * @return
     */
    Integer secondContentEdit(PartnerConfigContent content);

    /***
     *企业H5方案四:支付配置编辑
     * @param pay
     * @return
     */
    Integer editPlanConfigPay(PartnerConfigPay pay);

    /**
     * 企业H5方案四:查询数据表有没有支付配置记录
     *
     * @param partnerCode
     * @param payType
     * @param mode
     * @param planCode
     * @return
     */
    Integer queryPayConfigCount(@Param("planCode") String planCode,
                                @Param("partnerCode") String partnerCode,
                                @Param("payType") String payType,
                                @Param("mode") String mode);

    /***
     * 查询某企业是否有支付配置记录在数据表
     * @param partnerCode
     * @param planCode
     * @return
     */
    Integer queryPayCount(@Param("planCode") String planCode,
                          @Param("partnerCode") String partnerCode);

    /***
     * 删除某企业的支付配置记录
     * @param partnerCode
     * @param planCode
     * @return
     */
    Integer deletePayConfig(@Param("planCode") String planCode,
                            @Param("partnerCode") String partnerCode);

    /***
     * 编辑：方案四支付内容配置(将payConfig的值更新到内容数据表)
     * @param content
     * @return
     */
    Integer editPayConfigContentWithFile(PartnerConfigContent content);

    /***
     * 编辑：方案四支付内容配置(将payConfig的值更新到内容数据表)
     * @param content
     * @return
     */
    Integer editPayConfigContentNotFile(PartnerConfigContent content);


    /***
     * 先去新建的套餐计划服务列表中查询：是否具有当前这个企业，当前这个这个方案的套餐列表。
     * @param partnerCode
     * @param configType
     * @return
     */
    List<PartnerServicePlan> queryServicePlanCount(@Param("partnerCode") String partnerCode,
                                                   @Param("configType") String configType);

    /***
     * 套餐服务列表中存在当前企业和方案的数据，那么直接将这些套餐的状态置为“已下架”；
     * @param plan
     */
    void operationServicePlan(PartnerServicePlan plan);

    /***
     * 已停用的方案启用==新建的方案启用：（都需要将方案状态置为“已启用”）
     * @param config
     * @return
     */
    Integer operationContentPlan(PartnerConfigContent config);

    /***
     * 查询企业是否存在启用的方案
     * @param partnerCode
     * @param configStatus
     * @return
     */
    Integer queryConfig(@Param("partnerCode") String partnerCode,
                        @Param("configStatus") String configStatus);

    /**
     * 根据企业编码查询企业名称
     *
     * @param partnerCode
     * @return
     */
    String queryNameByCode(@Param("partnerCode") String partnerCode);


}
